package com.qinggeng.project.system.service;

import com.qinggeng.project.api.dto.DistributionPointDto;
import com.qinggeng.project.system.domain.DistributionPoint;
import com.qinggeng.project.system.domain.vo.DistributionPointVO;

import java.util.List;
import java.util.Set;

/**
 * 配送点Service接口
 *
 * @author qinggeng
 * @date 2020-06-16
 */
public interface IDistributionPointService
{
    /**
     * 查询配送点
     *
     * @param id 配送点ID
     * @return 配送点
     */
    public DistributionPoint selectDistributionPointById(Long id);

    /**
     * 查询配送点列表
     *
     * @param distributionPoint 配送点
     * @return 配送点集合
     */
    public List<DistributionPoint> selectDistributionPointList(DistributionPoint distributionPoint);

    /**
     * 新增配送点
     *
     * @param distributionPoint 配送点
     * @return 结果
     */
    public int insertDistributionPoint(DistributionPoint distributionPoint);

    /**
     * 修改配送点
     *
     * @param distributionPoint 配送点
     * @return 结果
     */
    public int updateDistributionPoint(DistributionPoint distributionPoint);

    /**
     * 批量删除配送点
     *
     * @param ids 需要删除的配送点ID
     * @return 结果
     */
    public int deleteDistributionPointByIds(Long[] ids);

    /**
     * 删除配送点信息
     *
     * @param id 配送点ID
     * @return 结果
     */
    public int deleteDistributionPointById(Long id);

    List<DistributionPoint> selectDistributionHandleList(DistributionPoint distributionPoint);

    /**
     * 更具商户ID查询最近配送点
     * @param shopId
     * @param lng
     * @param lat
     * @return
     */
    DistributionPointDto selectDistributionPointDtoByShopId(Long shopId, Float lng, Float lat);
    /**
     * 更具ID查询最近配送点
     * @param pointId
     * @param lng
     * @param lat
     * @return
     */
    DistributionPointDto selectDistributionPointDtoById(Long pointId, Float lng, Float lat);

    /**
     * 配送点列表
     * @param where
     * @return
     */
    List<DistributionPointDto> selectDistributionPointDtoList(DistributionPoint where);

    int countAllPonitCount();

    /**
     * 根据骑手ID查询配送点
     * @param courierId
     * @return
     */
    DistributionPoint selectPointByCourierId(Long courierId);


    int updatePointSetCourierId(Long pointId,Long courierId);

    /**
     * 根据订单ID查询配送点信息
     * @param ordersId
     * @return
     */
    DistributionPoint selectDistributionPointByOrdersId(Long ordersId);


    /**
     * 配送点列表 带上微信图片 店铺图片
     * @param where
     * @return
     */
    List<DistributionPointVO> selectDistributionPointVOList(DistributionPoint where);

    /**
     * 选择当前经纬度最近的配送点
     * @param lng
     * @param lat
     * @param shopId
     * @return
     */
    DistributionPointDto getDistributionPointDtoNearest(Float lng, Float lat, Long shopId);

    /**
     * 自提点一键收货
     * @param pointId
     * @return
     */
    Set<String> oneClickReceipt(String pointId);

    String getDistributionPointName(Long shopId,Float lng,Float lat);

    /**
     * 自提点系统选择
     */
    DistributionPointDto systemSelectPoint(Long shopId,Long pointId,Long addressId,Float lng, Float lat);

    String getPointSuffixName(String defaultValue);
    String getPointDescribe(String defaultValue);
}
